package com.jdbc;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import com.util.ReadWirtePropertis;

public class ConnectionJDBC {

	/**
	 * @param args
	 */
	//��������֮ǰ��classpath�����õ�JDBC��������JAR ����
	public static String DBDRIVER = "com.mysql.jdbc.Driver";
	//���ӵ�ַ���ɸ�����ݿ�����̵����ṩ�ģ�������Ҫ������ס
	public static String DBURL = "jdbc:mysql://localhost:3306/demo";
	//������ݿ���û���
	public static String DBUSER = "root";
	//������ݿ������
	public static String DBPASS = "root";
	
    public static Connection jdbcConnection()
    {
        String dbdriver = ReadWirtePropertis.getKeyValue("datasource.driverClassName");
        // ���ӵ�ַ���ɸ�����ݿ�����̵����ṩ�ģ�������Ҫ������ס
        String dburl = ReadWirtePropertis.getKeyValue("datasource.url");
        // ������ݿ���û���
        String dbuser = ReadWirtePropertis.getKeyValue("datasource.username");
        // ������ݿ������
        String dbpass = ReadWirtePropertis.getKeyValue("datasource.password");
        Connection con = null; // ��ʾ��ݿ�����Ӷ���
        try
        {
            Class.forName(dbdriver); // 1��ʹ��CLASS ����������
            con = DriverManager.getConnection(dburl, dbuser, dbpass); // 2��������ݿ�
        }
        catch (Exception e)
        {
            con = null;
        }
        return con;
    }
    
    public static Connection jdbcConnection1()
    {
    	Connection conn = null;
		try
		{
			System.out.println(DBDRIVER + " " + DBURL+ " " +  DBUSER+ " " + DBPASS);
			if (conn == null)
			{
//				Class.forName(DBDRIVER);
//				conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
				Class.forName("org.postgresql.Driver");
				String url = "jdbc:postgresql://localhost:5432/security_db";
				conn = DriverManager.getConnection(url, "postgres", "root");
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		return conn;
    }
	
	
	public static Connection testConnection(String driver,String url ,String user,String pwd)
    {
        Connection con = null; //��ʾ��ݿ�����Ӷ���
        try 
        {
            Class.forName(driver); //1��ʹ��CLASS ����������
            con = DriverManager.getConnection(url,user,pwd); //2��������ݿ�
        } catch (Exception e) 
        {
            con = null;
        }
        return con;
    }
	
//	public static void main(String[] args) throws Exception {
//		Connection con = null; //��ʾ��ݿ�����Ӷ���
//		Class.forName(DBDRIVER); //1��ʹ��CLASS ����������
//		con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2��������ݿ�
//		System.out.println(con);
//		con.close(); // 3���ر���ݿ�
//	}
	public static void main(String[] args) {
		getTableNameAndType(args);
	}
	
	public static void getTableNameAndType(String[] args) {
		Connection getConnection = jdbcConnection();
		PreparedStatement pst = null; 
		try {
			DatabaseMetaData dbmd = getConnection.getMetaData();
			ResultSet resultSet = dbmd.getTables(null, "%", "%",new String[] { "TABLE" });
			while (resultSet.next()) {
				String tableName = resultSet.getString("TABLE_NAME");
				System.out.println("����" + tableName + "\t\n���ֶ���Ϣ��");
				pst = getConnection.prepareStatement("select * from " + tableName);
				ResultSetMetaData rsd = pst.executeQuery().getMetaData();
				for (int i = 0; i < rsd.getColumnCount(); i++) 
				{
					System.out.print("  java���ͣ�" + rsd.getColumnClassName(i + 1));
					System.out.print("  ��ݿ�����:" + rsd.getColumnTypeName(i + 1));
					System.out.print("  �ֶ����:" + rsd.getColumnName(i + 1));
					System.out.print("  �ֶγ���:" + rsd.getColumnDisplaySize(i + 1));
					System.out.println();
		       }  
			}
		}
		catch(Exception e)
		{
		   e.printStackTrace();	
		}
		finally{
			try {
				if (getConnection != null) {
					getConnection.close();
					getConnection = null;
				}
				if (pst != null) {
					pst.close();
					pst = null;  
				}
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public static void getTableName() {
		Connection getConnection = jdbcConnection();
		try {
			DatabaseMetaData dbmd = getConnection.getMetaData();
			ResultSet resultSet = dbmd.getTables(null, "%", "%",new String[] { "TABLE" });
			while (resultSet.next()) {
				String tableName = resultSet.getString("TABLE_NAME");
				// System.out.println(tableName);
//				if (tableName.equals("user")) {
					// ResultSet rs
					// =getConnection.getMetaData().getColumns(null,
					// getXMLConfig.getSchema(),tableName.toUpperCase(),
					// "%");//������ݿⲻ��Ҫ��������ģ�ֱ�Ӵ�null�������oracle��db2��ô��
					ResultSet rs = dbmd.getColumns(null, "%", tableName, "%");
					System.out.println("����" + tableName + "\t\n���ֶ���Ϣ��");
					dbmd.getTableTypes();
//					ÿ�����������������У�
//
//					TABLE_CAT String => ����𣨿�Ϊnull��
//					TABLE_SCHEM String => ��ģʽ����Ϊnull��
//					TABLE_NAME String => �����
//					COLUMN_NAME String => �����
//					DATA_TYPE int => ���� java.sql.Types �� SQL ����
//					TYPE_NAME String => ���Դ������������ƣ����� UDT���������������ȫ�޶���
//					COLUMN_SIZE int => �еĴ�С��
//					BUFFER_LENGTH δ��ʹ�á�
//					DECIMAL_DIGITS int => С��ֵ�λ����� DECIMAL_DIGITS �����õ�������ͣ��򷵻� Null��
//					NUM_PREC_RADIX int => ����ͨ��Ϊ 10 �� 2��
//					NULLABLE int => �Ƿ�����ʹ�� NULL��
//					columnNoNulls - ���ܲ�����ʹ��NULLֵ
//					columnNullable - ��ȷ����ʹ��NULLֵ
//					columnNullableUnknown - ��֪���Ƿ��ʹ�� null
//					REMARKS String => �����е�ע�ͣ���Ϊnull��
//					COLUMN_DEF String => ���е�Ĭ��ֵ����ֵ�ڵ������ʱӦ������Ϊһ���ַ���Ϊnull��
//					SQL_DATA_TYPE int => δʹ��
//					SQL_DATETIME_SUB int => δʹ��
//					CHAR_OCTET_LENGTH int => ���� char ���ͣ��ó��������е�����ֽ���
//					ORDINAL_POSITION int => ���е��е������ 1 ��ʼ��
//					IS_NULLABLE String => ISO ��������ȷ�����Ƿ���� null��
//					YES --- ��������԰��� NULL
//					NO --- ��������԰��� NULL
//					���ַ� --- ���֪�������Ƿ���԰��� null
//					SCOPE_CATLOG String => �����������������Ե���������� DATA_TYPE ���� REF����Ϊnull��
//					SCOPE_SCHEMA String => ���ģʽ�������������Ե���������� DATA_TYPE ���� REF����Ϊnull��
//					SCOPE_TABLE String => ����ƣ������������Ե���������� DATA_TYPE ���� REF����Ϊnull��
//					SOURCE_DATA_TYPE short => ��ͬ���ͻ��û���� Ref ���͡����� java.sql.Types �� SQL ���͵�Դ���ͣ���� DATA_TYPE ���� DISTINCT ���û���ɵ� REF����Ϊnull��
//					IS_AUTOINCREMENT String => ָʾ�����Ƿ��Զ�����
//					YES --- �������Զ�����
//					NO --- �����в��Զ�����
//					���ַ� --- �����ȷ�������Ƿ����Զ����Ӳ��� 
					while (rs.next()) 
					{
						
						System.out.println(rs.getString("COLUMN_NAME") + "----" + rs.getString("DATA_TYPE") + "-----" + rs.getString("TYPE_NAME"));
					}
//				}
			}
//			FileSystemView fsv = FileSystemView.getFileSystemView();
//			String path = fsv.getHomeDirectory().toString();// ��ȡ��ǰ�û�����·��
//			File directory = new File(path);
//			if (directory.exists()) {
//			} else {
//				directory.createNewFile();
//			}
			/*
			 * FileWriter fw = new FileWriter(directory+ "\\"+dbname+".xml");
			 * PrintWriter pw = new PrintWriter(fw); pw.println("x");
			 * pw.flush(); pw.close(); System.out.println("��ɳɹ���");
			 */
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally
		{
			try {
				if (getConnection != null) {
					getConnection.close();
				}
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
     public static String getSchema() throws Exception {
            String schema;
            schema =jdbcConnection().getMetaData().getUserName();
            if ((schema == null) || (schema.length() == 0)) {
                throw new Exception("ORACLE��ݿ�ģʽ������Ϊ��");
            }
            return schema.toUpperCase().toString();
 
    }
 

}
